package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;


    @Override
    public String loadGoodsType() {
        //默认查询所有类型，默认根节点
        return this.getGoodsType(-1).toString();
        /*
        根据pId查询把所有pid为#{pId}的查询出来放到map中
         */
    }


    //查询该分类下所有子分类
    private JsonArray getGoodsType(int parentId) {
        JsonArray array = this.getAllGoodsTypeByParentId(parentId);
        for (int i = 0; i < array.size(); i++) {
            JsonObject obj = (JsonObject) array.get(i);//获取当前节点对象
            //obj.get("state").getAsString().equals("open")

            boolean flag = obj.get("state").getAsString().equals("closed");//true就是还有子节点
            if (flag){//递归
                //obj.add("children", this.getAllMenu(obj.get("id").getAsInt(),roleId));
                obj.add("children",this.getGoodsType(obj.get("id").getAsInt()));//把父节点的id传进去
            }else {//跳过循环
                continue;
            }
        }
        return array;
    }
    //0
    private JsonArray getAllGoodsTypeByParentId(int parentId) {
        JsonArray array = new JsonArray();
        List<GoodsType> list=goodsTypeDao.getAllGoodsTypeByParentId(parentId);
        for (GoodsType goodsType : list) {
            JsonObject obj = new JsonObject();
            obj.addProperty("id",goodsType.getGoodsTypeId());
            obj.addProperty("text",goodsType.getGoodsTypeName());
            obj.addProperty("state",goodsType.getGoodsTypeState()==1?"closed":"open");//
            obj.addProperty("iconCls","goods-type");
            JsonObject attributes = new JsonObject(); //扩展属性
            attributes.addProperty("state",goodsType.getGoodsTypeState());
            obj.add("attributes",attributes);
            array.add(obj);
        }
        return array;
    }

    //添加
    @Override
    public Boolean save(String goodsTypeName, Integer pId) {
        if (goodsTypeName!=null && pId != null){
            //第一次添加的进去状态一定是0
            goodsTypeDao.save(goodsTypeName,pId,0);
            GoodsType goodsType=goodsTypeDao.getGoodsType(pId);
            Integer goodsTypeId = goodsType.getGoodsTypeId();
            //如果父节点的状态是0，就改为1
            if (goodsTypeId==0){
                goodsType.setGoodsTypeState(1);
            }
            return true;
        }else {
            return false;
        }
    }

    @Override
    public ServiceVO deleteById(Integer goodsTypeId) {
        //有入库supplier_id、有进货purchase_list_goods_id和销售单据的不能删除。
        goodsTypeDao.delete(goodsTypeId);
        return new ServiceVO(SuccessCode.SUCCESS_CODE,SuccessCode.SUCCESS_MESS);
    }


}
